package cn.iocoder.yudao.module.social.service.container;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.social.controller.admin.container.vo.ContainerCreateReqVO;
import cn.iocoder.yudao.module.social.controller.admin.container.vo.ContainerPageReqVO;
import cn.iocoder.yudao.module.social.controller.admin.container.vo.ContainerUpdateReqVO;
import cn.iocoder.yudao.module.social.dal.dataobject.container.ContainerDO;

import jakarta.validation.Valid;
import java.util.Collection;
import java.util.List;

/**
 * 容器 Service 接口
 *
 * @author 芋道源码
 */
public interface ContainerService {

    /**
     * 创建容器
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createContainer(@Valid ContainerCreateReqVO createReqVO);

    /**
     * 更新容器
     *
     * @param updateReqVO 更新信息
     */
    void updateContainer(@Valid ContainerUpdateReqVO updateReqVO);

    /**
     * 删除容器
     *
     * @param id 编号
     */
    void deleteContainer(Long id);

    /**
     * 获得容器
     *
     * @param id 编号
     * @return 容器
     */
    ContainerDO getContainer(Long id);

    /**
     * 获得容器列表
     *
     * @param ids 编号
     * @return 容器列表
     */
    List<ContainerDO> getContainerList(Collection<Long> ids);

    /**
     * 根据创建者获得容器列表
     *
     * @param creator 创建者
     * @return 容器列表
     */
    List<ContainerDO> getContainerListByCreator(String creator);

    /**
     * 获得容器树形结构
     *
     * @param type 容器类型
     * @return 容器树形列表
     */
    List<ContainerDO> getContainerTree(String type);

    /**
     * 获得公开容器列表
     *
     * @param type 容器类型
     * @return 公开容器列表
     */
    List<ContainerDO> getPublicContainerList(String type);

    /**
     * 获得容器分页
     *
     * @param pageReqVO 分页查询
     * @return 容器分页
     */
    PageResult<ContainerDO> getContainerPage(ContainerPageReqVO pageReqVO);

    /**
     * 根据类型获得容器列表
     *
     * @param type 容器类型
     * @return 容器列表
     */
    List<ContainerDO> getContainerListByType(String type);

    /**
     * 根据父容器获得子容器列表
     *
     * @param parentId 父容器编号
     * @return 容器列表
     */
    List<ContainerDO> getContainerListByParent(Long parentId);

    /**
     * 校验容器列表
     *
     * @param ids 容器编号列表
     */
    void validateContainerList(Collection<Long> ids);

}
